/*
 * Curso contendra los atributos gráficos para posicionar los nuevos ramos
 */
package src;

import java.awt.Point;

public class Curso
{
    private Point p;
    private Point puntosT[];
    private Point puntosS[];
    private int cteSemestre = 70;
    private int cteTrimestre = 40;
    private int ancho;
    private int alto;
    private String periodo;
    public static int ANCHO = 150;
    public static int ALTO = 155;
    
    public Curso(int x, int y)
    {
        this.p = new Point(x,y);
        this.puntosT = new Point[3];
        this.puntosS = new Point[2];
        this.alto = ALTO;
        this.ancho = ANCHO;
        this.definirSemestres();
        this.definirTrimestres();
        this.periodo = null;
    }
    
    public int getAlto()
    {
        return alto;
    }

    public int getAncho()
    {
        return ancho;
    }
    
    public void setAncho( int ancho )
    {
        this.ancho = ancho;
    }
    
    public void setAlto( int alto )
    {
        this.alto = alto;
    }
    
    public Point getPunto()
    {
        return p;
    }

    public void setPunto(Point p)
    {
        this.p = p;
    }
    
    public void setX( int x )
    {
        this.p.x = x;
    }
    
    public void setY( int y )
    {
        this.p.y = y;
    }
    
    public int getX()
    {
        return (int) this.p.getX();
    }
    
    public int getY()
    {
        return (int) this.p.getY();
    }
    
    public Point getPosicion( int x )
    {
        return this.p;
    }
    
    private void definirSemestres()
    {
        this.puntosS[0] = p;
        this.puntosS[1] = new Point( p.x, p.y + 3*cteSemestre/2 -10);
    }
    
    private void definirTrimestres()
    {
        this.puntosT[0] = p;
        this.puntosT[1] = new Point( p.x, p.y + 3*cteTrimestre /2 );
        this.puntosT[2] = new Point( p.x, p.y + 3*cteTrimestre );
    }
    
    public Point getSemestre( int x )
    {
        if( x > 3 || x < 0)
            return null;
        return puntosS[x];
    }
    
    public Point getTrimestre( int x )
    {
        if( x < 0 || x > 4 )
            return null;
        return puntosT[x];
    }
    
    /**
     * Cambia el tipo de periodo que admite el curso.
     * En caso de error, mostrara por consola y dejará el curso con el mismo
     * periodo.
     * @param tp 
     */
    public void setPeriodo( String tp )
    {
        if( tp.equals("Anual") || tp.equals("Semestre") || tp.equals("Trimestre") )
            this.periodo = tp;
        else
            System.out.println("Error al setear periodo a curso.");
    }
    
    /**
     * Entrega el tipo de periodo que se encuentra soportando el curso.
     * @return periodo
     */
    public String getPeriodo()
    {
        return this.periodo;
    }
    
    /**
     * Quita el tipo de periodo que soporta el curso, setea null.
     */
    public void quitarPeriodo()
    {
        this.periodo = null;
    }
    
    /**
     * Modifica los valores que poseen los arreglos de puntosT (trimestres)
     * y de puntosS (semestres). Dado que se ha modificado externamente la
     * orientacion de jPanelDibujo
     */
    public void intercambiarPosiciones()
    {
        modificarSemestres();
        modificarTrimestres();
    }
    
    private void modificarSemestres()
    {
        puntosS[0] = intercambiarCoordenadas( puntosS[0] );
        puntosS[1] = intercambiarCoordenadas( puntosS[1] );
    }
    
    private void modificarTrimestres()
    {
        puntosT[0] = intercambiarCoordenadas( puntosT[0] );
        puntosT[1] = intercambiarCoordenadas( puntosT[1] );
        puntosT[2] = intercambiarCoordenadas( puntosT[2] );
    }
    
    private Point intercambiarCoordenadas( Point p )
    {
        int aux = p.x;
        p.x = p.y;
        p.y = aux;
        return p;
    }
}